/**
* 对象扁平化
* 说明：请实现 flatten(input) 函数，input 为一个 javascript 对象（Object 或者 Array），返回值为扁平化后的结果。
* 示例：
* var input = {
* a: 1,
* b: [ 1, 2, { c: true }, [ 3 ] ],
* d: { e: 2, f: 3 },
* g: null,
* }
* var output = flatten(input);
* output如下
* {
* "a": 1,
* "b[0]": 1,
* "b[1]": 2,
* "b[2].c": true,
* "b[3][0]": 3,
* "d.e": 2,
* "d.f": 3,
* // "g": null, 值为null或者undefined，丢弃
* }
*/
let res = {};
function flattenObj(obj, key) {
    console.log("obj", obj , key);
    console.log('type', Object.prototype.toString.call(obj));
    if(Object.prototype.toString.call(obj) === '[object Object]') {
        for(let itemKey in obj) {
            const itemValue = obj[itemKey];
            if(Object.prototype.toString.call(itemValue) === '[object Array]'
                || Object.prototype.toString.call(itemValue) === '[object Object]'){
                flattenObj(itemValue, itemKey);
            } else if(itemValue){
                console.log("item1:", itemValue, 'key', key);
                if(key){
                    res[`${key}.${itemKey}`] = flattenObj(itemValue, itemKey);
                } else {
                    res[itemKey] = itemValue;
                }
            }
        }
    } else if (Object.prototype.toString.call(obj) === '[object Array]') {
        obj.forEach((param, index)=>{
            console.log('param', param);
            if(Object.prototype.toString.call(param) === '[object Array]'
                || Object.prototype.toString.call(param) === '[object Object]') {
                    flattenObj(param, `${key}[${index}]`);
                } else {
                    res[`${key}[${index}]`] = param;
                }
        })
    } else {
        return obj;
    }

}

// let input = {
//     a: 1,
//     d: { e: {f: 3}  }
// }
// flattenObj(input)
// console.log(res);

let input1 = {
    a: 1,
    b: [ 1, 2, { c: true }, [ 3 ] ],
    d: { e: 2, f: 3 },
    g: null,
};
flattenObj(input1)
console.log('res', res);